/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-12-13     balanceTWK   add sdcard port file
 */

#include <rtthread.h>

#ifdef BSP_USING_SDCARD

#include <rtthread.h>
#include "spi_flash.h"
#include "spi_flash_sfud.h"
#include "drv_spi.h"
#include <dfs_elm.h>
#include <dfs_fs.h>
#include <dfs_posix.h>
#include "spi_msd.h"
#define DBG_ENABLE
#define DBG_SECTION_NAME  "app.card"
#define DBG_COLOR

#define DBG_LEVEL DBG_INFO
#include <rtdbg.h>

void sd_mount(void *parameter)
{

        rt_thread_mdelay(2);
				do
				{
					rt_thread_mdelay(1);
				}
				while(rt_thread_find("spi_flash_mount"));
        if(rt_device_find("msd") != RT_NULL)
        {
						if(rt_device_find("SPI_Flash") != RT_NULL)
						{
							if (dfs_mount("msd", "/sdcard", "elm", 0, 0) == RT_EOK)
							{
									LOG_I("sd card mount to '/sdcard'");
							}
							else
							{
									mkdir("/sdcard",0x777);
									if (dfs_mount("msd", "/sdcard", "elm", 0, 0) == RT_EOK)
									{
										LOG_I("sd card mount to '/sdcard'");
									}
									else
									{
										LOG_W	("sd card mount to '/sdcard' failed!");
									}										
									
							}
							
						}
            
        }

}
int Init_hw_msd(void)
{
	
	__HAL_RCC_GPIOD_CLK_ENABLE();
	rt_hw_spi_device_attach("spi1", "spi10", GPIOC, GPIO_PIN_7);

	msd_init("msd","spi10");
	return RT_EOK;
}
INIT_DEVICE_EXPORT(Init_hw_msd);
int stm32_sdcard_mount(void)
{
    rt_thread_t tid;

    tid = rt_thread_create("sd_mount", sd_mount, RT_NULL,
                           1024, RT_THREAD_PRIORITY_MAX - 2, 20);
    if (tid != RT_NULL)
    {
        rt_thread_startup(tid);
    }
    else
    {
        LOG_E("create sd_mount thread err!");
    }
    return RT_EOK;
}
INIT_ENV_EXPORT(stm32_sdcard_mount);

#endif /* BSP_USING_SDCARD */

